@火凤凰
2年前 提问
1个回答

反调试技术是什么

Anna艳娜
2年前
官方采纳

反调试技术,恶意代码用它识别是否被调试,或者让调试器失效。恶意代码编写者意识到分析人员经常使用调试器来观察恶意代码的操作,因此他们使用反调试技术尽可能地延长恶意代码的分析时间。为了阻止调试器的分析,当恶意代码意识到自己被调试时,它们可能改变正常的执行路径或者修改自身程序让自己崩溃,从而增加调试时间和复杂度。很多种反调试技术可以达到反调试效果。

总结了反调试技术有:

一、使用WindowsAPI :

  1. IsDebuggerPresent

  2. CheckRemoteDebuggerPresent ->call NtInformationProcess( 2参数ProcessInformationClass)

  3. NTQueryObject(2参数ObjectInformationClass)检查调试对象

  4. NTQuerySystemInformation( 1参数SystemInformationClass)

  5. ZwSetInformationThread(2参数ThreadInformationClass)设置ThreadHideFromDebugger,使线程与调试器强制分离

二、手动检测数据结构

  1. IsDebuggerPresent 查看peb

  2. ProcessHeap 查看PEB结构的0x18处 ProcessHeap中的ForceFlags和Flags

  3. 检测NTGlobalFlag

三、检测调试器:

1、注册表项:

SOFTWAREMicrosoftWindows NTCurrentVersionAeDebug(32位系统)
SOFTWAREWow6432NodeMicrosoftWindowsNTCurrentVersionAeDebug(64位系统)

2、窗口检测:

FindWindow  EnumWindow

3、进程检测

4、检测父进程

5、是否有SeDebugPrivilege权限

6、检测时间差

使用rdtsc指令

使用QueryPerformanceCounter和GetTickCount

7、断点检测

  • 软件断点

  • 硬件断点

8、执行代码校验和检查

四、干扰调试器

  1. 使用TLS回调

  2. 使用异常